<html>
<head>
<title>Installation and Administration</title>
<style type="text/css">
p {
	margin-left: 100px;
}

h2 {
	margin-left: 50px;
	font-style: italic;
}
.genegalmargin{
margin-left: 100px;
}
</style>
</head>
<body>
<ul style="margin-left:300px;">
	<li><a href="#intro">Introduction</a></li>
	<li><a href="#feature">Major Feature</a></li>
	<li><a href="#installation">Installation</a></li>
	<li><a href="#configuration">Configuration</a></li>
	<li><a href="#newprogram">Add new program</a></li>
	<li><a href="#executionenv">Set up execution environment</a></li>
	<li><a href="#drmintegration">DRM integration</a></li>
	<li><a href="#dynamic">Dynamic aspects of the program</a></li>
    <li><a href="#meta">Extra parameters affecting program submission</a></li>
    <ul>
    	<li><a href="#drmoptions">Sepcify DRM options</a></li>
    	<li><a href="#bulk">Submit Bulk job(job Array)</a></li>
    	<li><a href="#mpi">Support MPI</a></li>
    </ul>
    <li><a href="#generalparams">General parameters</a></li>
    <li><a href="#globaltemplates">Create Global templates</a></li>
    <li><a href="#forcereload">Force to reload the program</a></li>
     <li><a href="#differentdirectory">Deploy to different directory </a></li>
      <li><a href="#dba">Data-based analysis</a></li>
      <li><a href="#scripting">Using another script language in program specification xml file</a></li>
      <li><a href="#Template"> Template command line generator</a></li>
      <li><a href="#iDS">Data Service</a></li>
</ul>

<h1><a name="intro">Introduction</a></h1>
<p>This web portal parses program specification, and presents web
interface and web service interface. End user can submit job(run Unix
command) through web interface or web service interface.</p>
<p>A program is a Unix command, or binary. Program command line can
be specified using <a href="http://www.pasteur.fr/recherche/unites/sis/Pise/">Pise
XML</a> Or <a href="http://emboss.sourceforge.net/developers/acd/syntax.html">EMBOSS ACD</a>.</p>
<p>Once program is submitted, it runs in the Web Server itself, a cluster managed by
 DRM(Distributed Resource Management) system such as <a href="http://gridengine.sunsource.net/">SGE</a>, <a href="http://www.platform.com/Products/platform-lsf">LSF</a>,
and PBS, or Amazon EC2 Cluster.</p>
<h1><a name="feature">Major Features</a></h1>
<ul class="genegalmargin">
	<li>Minimal system requirements: only JRE 6</li>
	<li>Support both EMBOSS acd and Pise Xml format. </li>
	<li>Support Multiple scripting language for command line generation.</li>
	<li>Use DRMAA to submit job to Distributed Resource Management(DRM) system: support regular job, batch job and MPI job. Support any DRM system with a java DRMAA implementation</li>
	<li>Template creation to save you from entering the same set of parameters repeatedly</li>
	<li>Advanced Web Service support: well-constructed wsdl. Supporting security, and MTOM. Provide Web Service client, library, and example to facilitate Web Service usage. </li>
	<li>Data-based analysis: After end user fills input data, a list of analysis are suggested. Save the end user to remember which application is for which analysis</li>
	<li>User server file management in a familar file browser style. </li>
	<li>Job History management</li>
	<li>Simple Pipe support at web interface: select the output and run further analysis on it</li>
</ul>

<h1><a name="installation">Installation</a></h1>
<h2>Requirement</h2>
<p>JDK 6. Make sure the JRM_HOME variable and JAVA_HOME are set up
properly. To view the the java version, please run this command "java
-version"</p>


<h2>Installation</h2>
<pre>
	tar -czf inquiry.tgz -C /opt
	This creates a directory /opt/inquiry. Under /opt/inquiry you will find 
		apache-ant-1.7.1 
			apache ant used by other tool
		apache-tomcat-6.0.18
			tomcat web container. This directory is referred as <b>TOMCAT</b>
		cmdwork: this directory is referred as <b>APPWEB_HOME</b> below.
			configuration information for the application.
			This directory will be described in detail later.
		cmdtmpl
			containing templates for template-based command generations
		db-derby-10.5.1.1-bin
			Optional component to support access the embedded database if needed.
		drmaatest
			a small project to test/debug the DRMAA in your system.
		MailTest
			a small project to test mail configuration in your system.
		Perl5ScriptEngine
			a small project to build/test Perl integration in your system.
		appwebwstest
			utility to run function test for all supported applications.
		set.sh
			a script to change some configuration to adapt the installation to your site. 
	Directory structure under <b>APPWEB_HOME</b>
		<b>conf</b>: configuration directory
			<b>config.bsh</b>: configuration file
			<b>env.sh</b>: environment for command execution.
		db: embedded database directory
		programcache: Parsed program specification is stored here to avoid repeated parsing
		<b>programmeta</b>: extra program specification related to particular DRM system
		templates: user-space saved template or Global Template
		workdir: All job run under this directory
		<b>xml</b>: program specification using pise xml.
	start the tomcat like this
		cd /opt/inquiry/apache-tomcat-6.0.18
		bin/startup.sh
	
		
	The whole installation can be owned by any particular user. The tomcat can be started under this user, too.
	
	Once tomcat is started, you can access the web interface like this http://localhost:8080/appweb.
	
	To run tomcat as a service, please refer to <a href="http://tomcat.apache.org/tomcat-6.0-doc/setup.html"> tomcat setup</a>
	
	To host tomcat behind Apache, please refer to <a href="http://tomcat.apache.org/connectors-doc">tomcat connector</a>
	
</pre>


<h1><a name="configuration">Configuration</a></h1>
<p>Under <b>APPWEB_HOME</b>/conf, the config.bsh is the
configuration file for appweb. This file uses bean-shell syntax. It
is executed by appweb web application at startup. Please modifies
this file for configuration. This file has comments to explain how to modify it. You need to restart web server after
configuration file is modified.</p>
<h1><a name="newprogram">Add new Program</a></h1>
<p>You can specify new program using ACD syntax or pise xml file.
For pise xml file, please refer <a
	href="http://www.pasteur.fr/recherche/unites/sis/Pise">pise</a> for xml
specification. Different from pise, this implementation requires schema
declaration in the xml file like this &lt;pise
	xmlns="http://net.bioteam.appweb/cmdxml"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://net.bioteam.appweb/cmdxml pise.
xsd "&gt;.
Please refer to APPWEB_HOME/example.xml or APPWEB_HOME/field.xml
as an example.</p>

<p>Xml file has &lt;language&gt; element, the value can be
perl, javascript, or beanshell. javascript is recommended. In a single
xml file, only can one language be used.</p>

<p>For boolean parameter(type is Switch), true is represented by 1
and false is represented by 0.</p>

<p>parameters starting with _ are reserved. You should not use it in
your xml file.</p>
<p>once you have xml file ready, leave it to APPWEB_HOME/xml and
restart tomcat</p>
<h1><a name="executionenv">set up execution environment for
program</a></h1>
<p>create a file APPWEB_HOME/conf/env.sh. This file sets up
execution environment in bash syntax and it will be sourced before the
program run. For example, if you want to set up EMBOSS environment
variables for EMBOSS binaries The env.sh will be like this</p>
<pre class="genegalmargin" style="font-style:italic;background-color:#00ff00">
#bash syntax to set up execution environment for program
export PATH=/opt/bin:$PATH
export EMBOSS_ROOT=/opt/emboss/share/EMBOSS
export EMBOSS_DATA=/opt/emboss/share/EMBOSS/data
export EMBOSS_ACDROOT=/opt/emboss/share/EMBOSS/acd
export EMBOSS_TEMPDATA=/opt/emboss/share/EMBOSS/test
export PLPLOT_LIB=/opt/emboss/share/EMBOSS
export PATH=/opt/emboss/bin:$PATH
</pre>

<h1><a name="drmintegration">Integrate with DRM</a></h1>
<p>Here I use SGE as an example. For other DRMs, please refer to
their DRMAA document.</p>
<ol class="genegalmargin">
	<li>copy drmma.jar</li>
	<p>First copy drmma.jar from SGE_HOME/lib to
	TOMCAT/webapp/appweb/WEB-INF/lib</p>
	<li>change configuration</li>
	<p>Check the configuration file APPWEB_HOME/conf/config.bsh.
	make sure the OS submission is off and sge submission is on</p>
	<pre>
//use OS for submission
//              Apps.submitter=new net.bioteam.appweb.submit.UinxOSSubmiter();
//              Apps.checker=new net.bioteam.appweb.submit.UnixOSStatusChecker();
//              StatusChecker.checker=new net.bioteam.appweb.submit.UnixOSStatusChecker();

//use DRMAA for submission
// make sure the native library is configured like this -Djava.library.path=/opt/sge/lib/lx24-x86/
                Config.sf=org.ggf.drmaa.SessionFactory.getFactory ();
                Apps.submitter=new net.bioteam.appweb.submit.SGESubmitter();
                Apps.checker=new net.bioteam.appweb.submit.DRMAAStatusChecker();
                StatusChecker.checker=new net.bioteam.appweb.submit.DRMAAStatusChecker();
                Config.CATEGORY_KEY="_DRMAACATEGORY";
                Config.NATIVE_KEY="_DRMAANATIVE";
</pre>
	<li>specify native library path</li>
	<p>In my x86 system, I have JAVA_OPTS="$JAVA_OPTS
	-Djava.library.path=/common/sge/lib/lx24-x86" in
	TOMCAT/bin/catalina.sh. The SGE home for my x86 system is /common/sge.
	</p>
	<li>change the work directory</li>
	<p>The default working directory, directory under which the submitted job will run, is /opt/inquiry/cmdwork/workdir.  In a cluster environment, the working
	directory is most likely a directory which is mounted to all nodes. The working directory can be specified by modifying APPWEB_HOME/conf/config.bsh</p>
	<p>Config.topWorkdir=FilenameUtils.separatorsToSystem("my working directory");</p>
	
</ol>

<h1><a name="dynamic">Specify Dynamic aspect of the program</a></h1>
<p>For some program, the value for some parameters depends from the
current system. For example, the value for the nucleotide_db parameter
of the blastall programs depends on the nucleotide databases available
in the running system. For these kinds of parameters, the value are
retrieved dynamically from running system rather than from the xml files. This
is what net.bioteam.appweb.model.ProgramModifier does. Several
implementations are provided. Any one can be configured through
APPWEB_HOME/conf/config.bsh file.</p>

<p>net.bioteam.appweb.model.ExampleProgramModifier is a example 
implemenation. BeanshellProgramModifier is an implemenation reading bean shell code and uses
the code to modify the program. BeanshellProgramModifier is good since
you do not need to compile the code everytime after you modify code. But
is is pretty slow since this code is used heavily.</p>

<p>For performance reason, native java implementation is
recommended. To use it,</p>
<ol class="genegalmargin">
	<li>you first need to provide an implementation like
	net.bioteam.appweb.model.ExampleProgramModifier.</li>
	<li>compile it.</li>
	<li>copy the class file to
	TOMCAT/webapp/cmndportal1/WEB-INF/classes.</li>
	<li>modify configuration file.</li>
	<li>restart tomcat.</li>
</ol>

<p>The APPWEB_HOME/conf/config.bsh in the distribution uses
net.bioteam.appweb.model.BlastdbProgramModifier. This modified scans
blast database in the file system and supplies the scanned database to
blast-related programs. The blast database directory can be configured
in the confguration file like this <i>BlastdbProgramModifier.BLASTDB=FilenameUtils.separatorsToSystem("/mnt/data");</i>
</p>

<h1><a name="meta">Specify extra meta parameters for program</a></h1>
<p>Besides the parameters for command line generation in xml/acd
file, other parameters may need to assist the program submission. For
example, we may need to specify a parameter to tell the system what
email to send the result after job finishes. We may also need a
parameter to tell the system that the program is a MPI program. MPICH2
should be used to run the program. All these extra parameters can be
specified in a separate xml file under APPWEB_HOME/programmeta.</p>
<p>Under this directory, <b>.GLOBAL.xml</b> specifies the extra
parameters applied to all programs. X.xml specifies the extra parameters
available to only program X. Parameter in X.xml overrides that in
.GLOBAL.xml. Each parameter can be specified as</p>
<pre class="genegalmargin" style="font-style:italic;background-color:#00ff00">
	&lt;entry&gt;
          
                &lt;name&gt;_DRMAANATIVE&lt;/name&gt;
                &lt;value&gt;&lt;/value&gt;
                &lt;prompt&gt; Native String for DRMAA &lt;/prompt&gt;
                &lt;display&gt;1&lt;/display&gt;
        &lt;/entry&gt;
     
    name: parameter name,
    value: default value
    prompt: description for end user
    display: whether to display this parameter in web interface. If the parameter is displayed in 
    	web interface, its value can be changed by end user.
    </pre>
<p>Since the name is in the same scope as the parameter name from
xml file, please use '_' as the first character to avoid name conflict
with those parameters in xml/acd file.</p>
<p>Parameters specified in this file are not used by command line
generator. They can be used by any step in the program submission
process.</p>

<p>The meta data's modification is <b>not</b> automatically detected
by server. If the APPWEB_HOME/programmeta/X.xml is modified, you
should "touch APPWEB_HOME/xml/X.xml" or touch the acd file.</p>
<h2><a name="drmoptions">Specify DRM option</a></h2>
<p>DRMAA supports two options so submission can pass extra options or request resources from the underlying DRM system.
The two options are job category and native specification. </p>
<p>
The following file shows the default APPWEB_HOME/programmeta/.GLOBAL.xml file.
</p>
<pre class="genegalmargin">
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;entries xmlns="http://net.bioteam.appweb/cmdmeta"&gt;
	&lt;entry&gt;
		&lt;name&gt;_EMAIL&lt;/name&gt;
		&lt;value&gt;&lt;/value&gt;
		&lt;prompt&gt; email to receive job result&lt;/prompt&gt;
		&lt;display&gt;1&lt;/display&gt;
	&lt;/entry&gt;
	&lt;entry&gt;
	  &lt;!-- used in DRMAA submission, please refer DRMAA specification --&gt;
		&lt;name&gt;_DRMAACATEGORY&lt;/name&gt;
		&lt;value&gt;inquiry&lt;/value&gt;
		&lt;prompt&gt; Job Category for DRMAA &lt;/prompt&gt;
	&lt;/entry&gt;
	&lt;entry&gt;
	  &lt;!-- used in DRMAA submission, please refer DRMAA specification --&gt;
		&lt;name&gt;_DRMAANATIVE&lt;/name&gt;
		&lt;value&gt;&lt;/value&gt;
		&lt;prompt&gt; Native String for DRMAA &lt;/prompt&gt;
		&lt;display&gt;1&lt;/display&gt;
	&lt;/entry&gt;
	
&lt;/entries&gt;
</pre>
<p>
The extra parameters <b>_DRMAACATEGORY</b> and <b>_DRMAANATIVE</b> are <b>predefined</b> by this system. 
Their value will be value for DRMAA's job category and native specification.
</p>

<p>The default .GLOBAL.xml above assumes that there is an "inquiry" job category. Job category in DRMAA 
is mapped to SGE qtask. So you need an application "inquiry" in 
SGE_HOME/CELL/common/qtask or ~/.qtask.
If you have nothing to specify, just add one extra line "inquiry -q all.q" to qtask file. Please "man qtask" to 
refer SGE qtask specification. 
</p>

<p>Native specification in DRMAA is mapped to SGE's qsub command line option. The display is 1 for the _DRMAANATIVE 
in above .GLOBAL.xml file. This means that it will be displayed in web interface. End user can supply a value which 
will be part of the SGE subimission option.
</p>

<p>_DRMAACATEGORY and _DRMAANATIVE in the .GLOBAL.xml will affect all programs. If your program X has a different
 requirement, copy the .GLOBAL.XML to X.xml and modify it to suit your needs. Entry in X.xml will override that in
 .GLOBAL.xml with the same name
 </p>

<p>(<b>_email</b> is predefined extra parameter, too)</p>

<h2><a name="bulk">Support Bulk submission(Job Array)</a></h2>
<p> this is the batchblast.xml for batchblast application </p>
<pre class="genegalmargin">
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;entries xmlns="http://net.bioteam.appweb/cmdmeta"&gt;
        &lt;entry&gt;
            &lt;name&gt;_precommand&lt;/name&gt;
            &lt;display&gt;0&lt;/display&gt;
            &lt;prompt&gt;a class to split the input fasta file&lt;/prompt&gt;
            &lt;value&gt;net.bioteam.appweb.submit.BtbatchPreprocessor&lt;/value&gt;
          &lt;/entry&gt;


        &lt;entry&gt;
            &lt;name&gt;_bulk&lt;/name&gt;
            &lt;display&gt;0&lt;/display&gt;
            &lt;prompt&gt;whether this is a bulk submission&lt;/prompt&gt;
            &lt;value&gt;1&lt;/value&gt;
          &lt;/entry&gt;

        &lt;entry&gt;
            &lt;name&gt;_split&lt;/name&gt;
            &lt;display&gt;1&lt;/display&gt;
            &lt;prompt&gt;How many fasta sequences in each task input file&lt;/prompt&gt;
            &lt;value&gt;3&lt;/value&gt;
          &lt;/entry&gt;


        &lt;!--entry&gt;
            &lt;name&gt;_bulk_num&lt;/name&gt;
            &lt;display&gt;1&lt;/display&gt;
            &lt;prompt&gt;how many child task to run&lt;/prompt&gt;
            &lt;value&gt;5&lt;/value&gt;
          &lt;/entry--&gt;
&lt;/entries&gt;
</pre>
<p> if <b>_bulk</b> is 1, it indicates to submission that the job is a job array. <b>_bulk_num</b> specifies the number of 
child task in the job array. The display for <b>_bulk_num</b> is 1 so that it will be displayed in web interface and end 
user can request a different number of child task.  For batchblast, the _bulk_num is not used. Instead, it has a <b>_precommand</b>
which is a class that implements CommandPreProcessor interface. The batchblast precommand will itself decide the number of child
task based on the input file. </p>

<p> To run child task, child task needs to know its task index. It can be assumed that the _task_id is available at run time
for child task.  To make the _task_id available for SGE, you need to add one line <b>export _task_id=$SGE_TASK_ID</b> to
APPWEB_HOME/conf/env.sh</p>
<h2><a name="mpi">Support MPI Submission</a></h2>
<p>This is the mpiblast.xml file for mpiblast application</p>
<pre class="genegalmargin">
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;entries xmlns="http://net.bioteam.appweb/cmdmeta"&gt;
        &lt;entry&gt;
            &lt;name&gt;_MPIPREFIX&lt;/name&gt;
            &lt;display&gt;0&lt;/display&gt;
            &lt;prompt&gt;to start mpi program&lt;/prompt&gt;
            &lt;value&gt;/common/mpich2/bin/mpiexec -n $NSLOTS&lt;/value&gt;
          &lt;/entry&gt;
          
           &lt;entry&gt;
          &lt;!-- used in DRMAA submission, please refer DRMAA specification --&gt;
                &lt;name&gt;_DRMAANATIVE&lt;/name&gt;
                &lt;value&gt;-pe mpich2 5-8&lt;/value&gt;
                &lt;prompt&gt;MPI specification for DRM and other DRMAA native specification &lt;/prompt&gt;
                &lt;display&gt;1&lt;/display&gt;
        &lt;/entry&gt;

&lt;/entries&gt;
</pre>
<p><b>_MPIPREFIX</b> defines how to submit the mpi binary. For mpiblast in this example, mpich2 is used to submit mpiblast. 
Of course, your mpiblast binary should be compiled against this mpich2. The value for _DRMAANATIVE is <i>-pe mpich2 5-8</i>
which is the SGE specification for a Parallel Execution(PE) environment. Before you can use this, mpich2 should be set up 
properly for SGE. The display is 1 for _DRMAANATIVE so that end user can modify the number of processors. The dafult number of 
processors in this example is 5-8. End user can change to to 5-20 so that 20 number of processors can be requested at maximum.
If administrator does not want end user to change, he can change the display to 0.
</p> 


<h1><a name="generalparams">general parameter available to each
program</a></h1>
<p>Ten parameters "_infile1", "_infile2", ..., "_infile10" are available
for each program. They are displayed at the bottom of the web page. You
can use them in your xml file for command line generation.</p>
<h1><a name="globaltemplates">create global template</a></h1>
<p>As an end user, create a template from web interface. Then copy
the template from APPWEB_HOME/templates/username/templatename to
APPWEB_HOME/templates/.GLOBAL as X_Y where X is the program name like
blastall and Y is the display name for the template like "myblast". primerblast is one example
global template coming with this release.</p>
<h1><a name="forcereload">Force reload program specification.</a></h1>
<p>You just need to touch the program specification file (xml file
or acd file).</p>
<p>To force reload all program,</p>
<pre class="genegalmargin"> 
	stop tomcat.
	rm -rf APPWEB_HOME/programcache/*
	restart tomcat.
	</pre>

<h1><a name="differentdirectory">deploy to different directory</a></h1>
<p>If your tomcat directory is not /opt/inquiry/apache-tomcat-6.0.18
or your cmdwork directory(APPWEB_HOME) is not /opt/inquiry/cmdwork

<h2><a name="tomcat">Using your own tomcat</a></h2>
<p>This system is tested with tomcat 6.0.x. However, tomcat with
version of 4.x or up should work. If you want to use your own tomcat,
first add or replace <i>derby.jar (embedded database supporting )</i> and <i>derbynet.jar
(embedded database supporting)</i> to tomcat lib
directory. Then move apache-tomcat-6.0.18/webapps/appweb to your
tomcat webapps directory.</p>
<p>If you need to use other J2EE web container, please contact
xxx@xxx.xxx.</p>

<p>To use a different directory for APPWEB_HOME, just move /opt/inquiry/cmdwork to new directory.</p>

<p>Then run the following commands</p>
<pre class="genegalmargin" style="font-style:italic;background-color:#00ff00">
export OLD_TOMCAT==/opt/inquiry/apache-tomcat-6.0.18
export OLD_CMDWORKTOP=/opt/inquiry
export TOMCAT_HOME=/opt/inquiry/apache-tomcat-6.0.18
export CMDWORKTOP=/opt/inquiry

perl -pi -e "s|$OLD_CMDWORKTOP|$CMDWORKTOP|"  $CMDWORKTOP/cmdwork/conf/config.bsh
perl -pi -e "s|$OLD_CMDWORKTOP|$CMDWORKTOP|"  $TOMCAT_HOME/webapps/appweb/WEB-INF/web.xml
perl -pi -e "s|$OLD_CMDWORKTOP|$CMDWORKTOP|"  $TOMCAT_HOME/webapps/appweb/META-INF/context.xml
perl -pi -e "s|$OLD_CMDWORKTOP|$CMDWORKTOP|"  $TOMCAT_HOME/webapps/appweb/WEB-INF/classes/ehcache.xml
perl -pi -e "s|$OLD_TOMCAT|$TOMCAT_HOME|"  $TOMCAT_HOME/webapps/appweb/WEB-INF/classes/log4j.properties
  
</pre>
<h1><a name="dba"> Data-based Analysis</a> </h1>
<p>In this type of analysis, the end user first inputs its data. Then a list of possible analysis are presented. This saves end user from remembering
which program is for which analysis</p>
<p>Data-based analysis is backed up by a set of meta files under APPWEB_HOME/parametermaps.  A set of meta files comes with distribution to support
this type of analysis. If you find your application is not present for a particular type of input, most likely the meta file for your application 
is not in the meta directory. If you need more information on the meta file format, please contact support.
</p>
<h1><a name="scripting"> Using another script language in program specification xml file</a> </h1>
<p>
Pise Xml file uses scripting language such as perl, javascript, java to generate command line dynamically. This release
supports perl, javascript and beanshell by default. If you favorite language is not one of these three, please 
have a look https://scripting.dev.java.net. Any languages supported there can be supported easily. Just drop 
relevant jar files to TOMCAT/webapps/appweb/WEB-INT/lib and restart tomcat. 
For any other language, please contact support.
</p>
<h1><a name="Template"> Template command line generator</a> </h1>
<p>
If your application is a script or a file which does not accept any command line option, but expects certain variablex
available in execution environment,  The TemplateGenerator is your best choice for you. 
To use this, you need modify your script/file a little bit to generate a template using <a href="http://velocity.apache.org/engine/devel/user-guide.html">apache velocity</a> syntax.
Leave this template file under APPWEB_HOME/cmdtmpl. Please use APPWEB_HOME/rdemo.vm as an template example.
Then add a file under APPWEB_HOME/programmeta to let the system know that this program uses Template-based command line
generator. APPWEB_HOME/programmeta/rdemo.xml can serve as an example.
</p>
<h1><a name="iDS"> Data Service</a> </h1>
<p>
TODO:add document here
</p>
</body>
</html>




